#include <iostream>
using namespace std;

int main() {
  char a[3]{'A', 'B', '\0'};
  char b[2]{'C', 'D'};  // 指定初始值列表的话，初始值数量可以和数组长度相同，但此时不宜直接用作字符串。
  char c[]{'E', 'F'};   // 没有结束符，相当于char[2]
  char d[] = "GH";      // 隐含结束符，相当于char[3]
  // char e[2] = "GH";  // 错误！初始值数量(3)超过数组定义的长度(2)。
  #define DUMP(s) { cout << (void*)s << ' ' << sizeof(s) << ' ' << s << endl; }
  // 观察输出的4个数组地址，会发现顺序和声明的次序可能不符。
  DUMP(a)
  DUMP(b)
  DUMP(c)
  DUMP(d)
  cout << &b[1] << endl;  // 遇到相邻数组的结束符才终止，数组访问越界。
}